/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.model;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.db.SqlManager;
import com.exception.DataException;
import com.javabeans.Carrera;
import com.javabeans.CarreraDocente;
import com.javabeans.Categoria;
import com.javabeans.DetalleDocente;
import com.javabeans.Usuario;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Administrador
 */
public class AdminCarreraDocente implements CarreraDocenteManager{
    private Connection c;
    public AdminCarreraDocente(Connection c){
        this.c = c;
    }
    
    @Override
    public List<CarreraDocente> getCarreraDocentesByFacul(int idFacultad) throws DataException{
        List<CarreraDocente> docentes = new ArrayList<CarreraDocente>();
        try{
            docentes = this.getCarreraDocentesGener(idFacultad, 0, true);
        }catch(SQLException e){
            throw new DataException(" AdminCarreraDocente -> getCarreraDocenteByFacul() e = "+e.getMessage());
        }
        return docentes;
    }
    
    @Override
    public List<CarreraDocente> getCarreraDocentesByFaculInactivos(int idFacultad) throws DataException{
        List<CarreraDocente> docentes = new ArrayList<CarreraDocente>();
        try{
            docentes = this.getCarreraDocentesGener(idFacultad, 0, false);
        }catch(SQLException e){
            throw new DataException(" AdminCarreraDocente -> getCarreraDocentesByFaculInactivos() e = "+e.getMessage());
        }
        return docentes;
    }
    
    @Override
    public List<CarreraDocente> getCarreraDocenteByCarrera(int idFacultad, int idCarrera) throws DataException{
        List<CarreraDocente> docentes = new ArrayList<CarreraDocente>();
        try{
            docentes = this.getCarreraDocentesGener(idFacultad, idCarrera, true);
        }catch(SQLException e){
            throw new DataException(" AdminCarreraDocente -> getCarreraDocenteByCarrera() e = "+e.getMessage());
        }
        return docentes;
    }
    
    public List<CarreraDocente> getCarreraDocentesGener(int idFacultad, int idCarrera, boolean activo) throws DataException{
        List<CarreraDocente> docentes = new ArrayList<CarreraDocente>();
        ResultSet rs = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT U.IDUSUARIO";
            query += ", U.NOMBRE, U.APELLIDO";
            query += ", DD.IDCATEGORIA";
            query += ", CD.IDCARRERA";
            query += ", C.NOMBRE";
            query += ", C.SIGLA";
            query += ", CA.NOMBRE";
            query += ", CA.SIGLA";
            query += " FROM USUARIO U";
            query += " INNER JOIN (DETALLE_DOCENTE DD INNER JOIN CATEGORIA CA ON DD.IDCATEGORIA=CA.IDCATEGORIA) ON U.IDUSUARIO=DD.IDDETALLE_DOCENTE";
            query += ", CARRERA_DOCENTE CD";
            query += " INNER JOIN CARRERA C ON CD.IDCARRERA=C.IDCARRERA AND C.IDFACULTAD="+idFacultad;
            query += " WHERE U.IDUSUARIO=CD.IDDOCENTE";
            if(idCarrera != 0)
                query += " AND CD.IDCARRERA="+idCarrera;
            if(activo)
                query += " AND CD.ACTIVO=1";
            else
                query += " AND CD.ACTIVO=0";
            if(idCarrera != 0)
                query += " ORDER BY U.NOMBRE, U.APELLIDO";
            else
                query += " ORDER BY C.NOMBRE, U.NOMBRE, U.APELLIDO";            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                CarreraDocente cd = new CarreraDocente();
                cd.setIdDocente(rs.getInt("U.IDUSUARIO"));
                cd.setIdCarrera(rs.getInt("CD.IDCARRERA"));
                
                if(idCarrera == 0){
                    Carrera carrera = new Carrera();
                    carrera.setNombre(rs.getString("C.NOMBRE"));
                    carrera.setSigla(rs.getString("C.SIGLA"));
                    cd.setCarrera(carrera);
                }
                
                Usuario d = new Usuario();
                d.setIdUsuario(rs.getInt("U.IDUSUARIO"));
                d.setNombre(rs.getString("U.NOMBRE"));
                d.setApellido(rs.getString("U.APELLIDO"));
                DetalleDocente dd = new DetalleDocente();
                Categoria ca = new Categoria();
                ca.setNombre(rs.getString("CA.NOMBRE"));
                ca.setSigla(rs.getString("CA.SIGLA"));
                dd.setCategoria(ca);
                d.setDetalleDocente(dd);
                cd.setDocente(d);
                docentes.add(cd);
            }
        }catch(SQLException e){
            throw new DataException(" -> getCarreraDocentesGener(int idFacultad, int idCarrera, boolean activo) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return docentes;
    }
}
